package com.demo;

import com.ycproxy.YcInvocationHandler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * InvocationHandler 是个回调接口，通过实现该接口的invoke方法，
 */
public class CheckRightsInvocationHandler implements YcInvocationHandler {
    private Object target;


    // 构造方法，传入被代理的对象
    public CheckRightsInvocationHandler(Object target) {
        this.target = target;
    }
    // 对外提供一个方法用于创建一个代理类对象
//    public Object createProxy() {
//        // jdk中有  Proxy.newProxyInstance() 方法  生成一个代理类对象
//        Object proxy = Proxy.newProxyInstance(
//                CheckRightsInvocationHandler.class.getClassLoader(),
//                target.getClass().getInterfaces(),
//                this );
//        // 这个proxy对象就是下面那个方法里面得proxy
//        return proxy;
//    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (    method.getName().startsWith("show") ||
                method.getName().startsWith("update") ||
                method.getName().startsWith("save")) {
            // 1. 之前调用的功能
            checkRights();
        }
        // 2. 调用目标类的目标方法
        Object resultValue = method.invoke(target, args);

        if (method.getName().startsWith("show") ||
                method.getName().startsWith("update") ||
                method.getName().startsWith("save")) {
            // 3. 之后调用的功能
            recordLog();
        }
        return resultValue;
    }


    private void checkRights() {
        System.out.println("权限验证");
    }

    public void recordLog() {
        System.out.println("记录日志");
    }

}
